package com.tuanzi.loan.business.repository.family;

import com.tuanzi.loan.vo.request.family.BusinessPrepaymentSearchRequest;
import com.tuanzi.loan.vo.request.family.PartnerBalanceSearchRequest;
import com.tuanzi.loan.vo.response.family.BusinessPrepaymentSearchResponse;
import com.tuanzi.loan.vo.response.family.PartnerBalanceSearchResponse;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * 甲方预付费充值
 * @author JinRuiyang
 */
public interface FirstPartyPrepaymentRepository {
    public enum PrepaymentProductStatus {

        DISABLE(0),ENABLE(1);

        PrepaymentProductStatus(int value){
            this.value = value;
        }
        public Byte getValue(){
            return (byte)this.value;
        }
        private int value;
    }

    /**
     * 创建商务充值
     * @param businessPrepayment 模板ID，合作方名，点击单价, 充值金额, 操作人
     * @return 结果
     */
    Integer create(BusinessPrepaymentSearchRequest businessPrepayment);

    /**
     * 更新商务充值
     * @param businessPrepayment 模板ID，合作方名，操作人，点击单价
     * @return 结果
     */
    Integer update(BusinessPrepaymentSearchRequest businessPrepayment);

    /**
     * 充值,添加充值记录，更新商务充值的操作人信息
     * 充值金额可为负数,但余额不可为负数
     * @param businessPrepayment 模板ID，合作方名，初始金额, 充值金额, 操作人
     * @return 结果
     */
    Integer recharge(BusinessPrepaymentSearchRequest businessPrepayment);

    /**
     * 获取所有商务充值的模板ID，用于查询数据权限使用
     * @return 模板ID列表
     */
    List<Long> getAllModelId();

    /**
     * 更新活动状态
     * @param modelId 模板ID
     * @param status 活动状态 1：上线 / 0：下线
     * @return 更新结果
     */
    Integer updateActivityStatus(Long modelId,Integer status);

    /**
     * 获取商务充值余额
     * @param modelId 模板ID
     * @return 充值金额
     */
    Double getPrepaymentBalance(Long modelId);

    /**
     * 修改商务充值状态
     * 将状态标记为不可用
     * @param modelId 模板ID
     * @param status 状态码
     * @return 结果
     */
    Integer changeStatus(Long modelId,PrepaymentProductStatus status);

    /**
     * 商务充值查询
     * @param searchRequest 模板ID，合作方名
     * @param pageable 分页信息
     * @return 响应列表
     */
    Page<BusinessPrepaymentSearchResponse> listBusinessPrepayment(BusinessPrepaymentSearchRequest searchRequest, Pageable pageable);

    /**
     * 合作方余额查询
     * @param searchRequest 开始时间，结束时间，模板ID，合作方名
     * @param pageable 分页信息
     * @return 响应列表
     */
    Page<PartnerBalanceSearchResponse> listPartnerBalance(PartnerBalanceSearchRequest searchRequest, Pageable pageable);

}
